Vybrané úlohy z diferenciální 
geometrie křivek a ploch

Antonín Slavík
Matematicko-fyzikální fakulta UK

Křivky s předepsanou křivostí

Rovinná křivka parametrizovaná obloukem: c:I->(ℝ^2), ||c'(s)||=1 pro každé s∈I

Tečný vektor: T(s)=c'(s)=(cos α(s),sin α(s))

Křivost křivky: κ(s)=α'(s)

Křivka s předepsanou křivostí:

α(s)=∫κ(s)ds

c(s)=∫T(s)ds, tj. x(s)=∫cos α(s)ds, y(s)=∫sin α(s) ds

Křivka je určena jednoznačně až na posunutí a otočení (integrační konstanty).

Hledání křivek s předepsanou křivostí často vede na primitivní funkce, které nelze vyjádřit pomocí elementárních funkcí.

Příklad: κ(s)=(s^n), n∈(Subscript[ℕ, 0])

Řešení: x(s)=∫cos ((s^(n+1))/(n+1))ds, y(s)=∫sin ((s^(n+1))/(n+1))ds

Pro n≥1 nelze vyjádřit pomocí elementárních funkcí.

GraphicsRow[Table[sol=NDSolve[{x'[s]==Cos[α[s]],y'[s]==Sin[α[s]],α'[s]==(s^n),x[0]==0,y[0]==0,α[0]==0},{x[s],y[s],α[s]},{s,-25,25},MaxSteps->∞];Framed[ParametricPlot[{x[s],y[s]}/. sol,{s,-25,25},PlotRange->All,Axes->False,PlotLabel->κ[s]==(s^n)]],{n,0,3}],ImageSize->Full]

n=1: klotoida, Cornuova (Eulerova) spirála

Pro n≥1 lze spočítat (Subscript[x, ∞])=(lim_(s->∞))x(s)=(∫_0^∞)cos ((s^(n+1))/(n+1))ds, (Subscript[y, ∞])=(lim_(s->∞))y(s)=(∫_0^∞)sin ((s^(n+1))/(n+1))ds.

n=1 (Fresnelovy integrály):

Integrate[Cos[s^2/2],{s,0,∞}]

Integrate[Sin[s^2/2],{s,0,∞}]

Obecné n∈ℕ:

Assuming[n∈Integers&&n>1,Integrate[Cos[s^n/n],{s,0,∞}]]

Assuming[n∈Integers&&n>1,Integrate[Sin[s^n/n],{s,0,∞}]]

Proč to platí? Substituce:

({{(∫_0^∞)cos ((s^(n+1))/(n+1))ds=(((n+1)^(1/(n+1)))/(n+1))(∫_0^∞)(t^((1/(n+1))-1))cos tdt
({{(∫_0^∞)sin ((s^(n+1))/(n+1))ds=(((n+1)^(1/(n+1)))/(n+1))(∫_0^∞)(t^((1/(n+1))-1))sin tdt}})}})

Stačí spočítat (∫_0^∞)(t^(w-1))(e^(-i t))dt a rozložit na reálnou a imaginární část.
Cauchyova věta: g(z)=(z^(w-1))(e^(-z)), (∫_((Subscript[c, 1])+(Subscript[c, 2])))g(z)dz=(∫_((Subscript[c, 3])+(Subscript[c, 4])))g(z)dz

r=1;R=2;
Graphics[{Thick,Arrowheads[{{.08,.6}}],Arrow[{{r,0},{R,0}}],Arrow[{{0,r},{0,R}}],Arrow[Table[r{Cos[t],Sin[t]},{t,0,π/2,π/200}]],Arrow[Table[R{Cos[t],Sin[t]},{t,0,π/2,π/200}]],Text["r",{r,0},{0,1.5}],Text["R",{R,0},{0,1.5}],Text["(Subscript[c, 1])",{(r+R)/2,0},{0,1.5}],Text["(Subscript[c, 4])",{0,(r+R)/2},{3,0}],Text["(Subscript[c, 3])",r{Cos[π/4],Sin[π/4]},{2,2}],Text["(Subscript[c, 2])",R{Cos[π/4],Sin[π/4]},-{2,2}]},Axes->True,Ticks->None,BaseStyle->{FontSize->20},ImageSize->Medium]

r->0, R->∞:

(∫_(Subscript[c, 2]))g(z)dz->0, (∫_(Subscript[c, 3]))g(z)dz->0

(∫_(Subscript[c, 1]))g(z)dz->(∫_0^∞)(t^(w-1))(e^(-t))dt=Γ(w)

(∫_(Subscript[c, 4]))g(z)dz->(i^w)(∫_0^∞)(t^(w-1))(e^(-i t))dt

Výsledek: (Subscript[x, ∞])=Γ((1/(n+1)))(((n+1)^(1/(n+1)))/(n+1))cos (π/(2(n+1))), (Subscript[y, ∞])=Γ((1/(n+1)))(((n+1)^(1/(n+1)))/(n+1))cos (π/(2(n+1)))

Příklad: κ(s)=a sin s, a∈(SuperPlus[ℝ])

Řešení: α(s)=(∫_0^s)a sin udu=a-a cos s  ⟹  x(s)=∫cos (a-a cos s)ds, y(s)=∫sin (a-a cos s)ds

Manipulate[sol=NDSolve[{x'[s]==Cos[α[s]],y'[s]==Sin[α[s]],α'[s]==a Sin[s],x[0]==0,y[0]==0,α[0]==0},{x[s],y[s],α[s]},{s,-20,20}];ParametricPlot[{x[s],y[s]}/. sol,{s,-20,20},PlotRange->{{-3,3},{-3,3}},PerformanceGoal->"Quality"],{a,1,20,Appearance->"Labeled"},TrackedSymbols:>{a},SaveDefinitions->True]

Pro které hodnoty a je křivka uzavřená? 

a≐2.40, a≐5.52, a≐8.65, ...

Quiet@GraphicsRow[l=π;κ[s_]=a Sin[s];Table[sol=NDSolve[{x'[s]==Cos[α[s]],y'[s]==Sin[α[s]],α'[s]==κ[s],x[0]==0,y[0]==0,α[0]==0},{x[s],y[s],α[s]},{s,-l,l},WorkingPrecision->35];
h=Which[k==1,1.1,k==2,0.7,k==3,0.6];Framed@ParametricPlot[{x[s],y[s]}/. sol,{s,-l,l},PlotRange->{{-h,h},{-h,h}},PerformanceGoal->"Quality",Axes->False],{a,Table[N[BesselJZero[0,k],50],{k,1,3}]}],ImageSize->Large]

Lze najít přesné hodnoty? Je jich nekonečně mnoho?

Symetrie: κ(s+π)=-κ(s)
⟹ Stačí hledat hodnoty a takové, že x(π)=x(0)=0, y(π)=y(0)=0

Integrate[a Sin[u],{u,0,s}]

Assuming[a>0,Integrate[Cos[a-a Cos[s]],{s,0,π}]]

Assuming[a>0,Integrate[Sin[a-a Cos[s]],{s,0,π}]]

Proč to platí?

Moderní definice: Besselova funkce (Subscript[J, 0]) jako řešení diferenciální rovnice x y''(x)+y'(x)+x y(x)=0

Besselova definice (1. polovina 19. století): (Subscript[J, 0])(a)=(1/π)(∫_0^π)cos(a sin u)du

Plot[BesselJ[0,a],{a,0,15},BaseStyle->{FontSize->15}]

Rotační plochy s konstantní Gaussovou křivostí

Křivka v rovině x-z: c(t)=(x(t),0,z(t)), bez újmy na obecnosti parametrizovaná obloukem: x'(((t))^2)+z'(((t))^2)=1

Rotací kolem osy z vznikne plocha f(u,v)=(x(u)cos v,x(u) sin v, z(u)).

Gaussova křivost rotační plochy: K(u,v)=-x''(u)/x(u)

Konstantní křivost K ⟹ x''(t)+K x(t)=0, funkci z dopočteme z rovnice x'(((t))^2)+z'(((t))^2)=1 (numerická integrace)

K=0: triviální (válec, kužel, rovina)

K≠0 lze vhodným škálováním převést na K=±1

Manipulate[DynamicModule[{x,amin,amax,a,tmax,tmin,plotrange,z0,z},{x[a_],amin,amax,a,tmax[a_],tmin[a_],plotrange}=Which[type==1,{a Cos[#1]&,0.3,2,2,ArcSin[Min[1,(1/a)]],-ArcSin[Min[1,(1/a)]],{{0,2},{-2,2}}},type==2,{a Cosh[#1]&,0.25,1.6,0.25,ArcSinh[(1/a)],-ArcSinh[(1/a)],{{0,2.},{-2,2}}},type==3,{Exp[-#1]&,0,0,0,4,0,{{0,1.1},{0,2.5}}},type==4,{a Sinh[-#1]&,0.1,0.9,0.1,0,-ArcCosh[(1/a)],{{0,1.1},{-2.8,0}}}];Column[{If[type≠3,Manipulator[Dynamic[a],{amin,amax},Appearance->"Labeled"]],Dynamic[z0=y/. First[NDSolve[{y'[t]==(Sqrt[1-(((x[a])'[t])^2)]),y[0]==0},y,{t,tmin[a],tmax[a]},MaxSteps->∞]];z[t_]:=Re[z0[t]];Row[{ParametricPlot[{x[a][t],z[t]},{t,tmin[a],tmax[a]},PlotRange->plotrange,PlotRangeClipping->False,ImageSize->150,BaseStyle->11,PlotStyle->Thick,Epilog->{PointSize[Large],Point[{{x[a][tmin[a]],z[tmin[a]]},{x[a][tmax[a]],z[tmax[a]]}}]}],Spacer[20],RevolutionPlot3D[{x[a][t],z[t]},{t,tmin[a],tmax[a]},PerformanceGoal->"Quality",Boxed->False,Axes->False,ImageSize->{350,350},PlotStyle->FaceForm[{Lighter[Blue],Specularity[White,50]},{Orange,Specularity[White,50]}],Lighting->"Neutral",Mesh->None,PlotRange->All,ViewPoint->{1,-3,1},BoxRatios->Automatic]}],TrackedSymbols:>{a}]}]],{{type,1,"Surface type"},{1->"Positive curvature",2->"Negative curvature, 1st type",3->"Negative curvature, 2nd type (pseudosphere)",4->"Negative curvature, 3rd type"},ControlType->PopupMenu},SaveDefinitions->True,TrackedSymbols:>{type}]

Potíže s NDSolve:

a=1.55;
z=y/.First[NDSolve[{y'[t]==(Sqrt[1-a^2 ((Sinh[t])^2)]),y[0]==0},y,{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},MaxSteps->∞]];
Plot[z[t],{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},AspectRatio->Automatic]

a=1.6;
z=y/.First[NDSolve[{y'[t]==(Sqrt[1-a^2 ((Sinh[t])^2)]),y[0]==0},y,{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},MaxSteps->∞]];
Plot[z[t],{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},AspectRatio->Automatic]

Proč to nefunguje? Pro t>0 má interpolační funkce nenulovou imaginární složku!

Plot[Im[z[t]],{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},AspectRatio->Automatic]

Plot[Re[z[t]],{t,-ArcSinh[(1/a)],ArcSinh[(1/a)]},AspectRatio->Automatic]

Geodetické křivky na plochách

Křivka c:[a,b]->(ℝ^3) ležící na dané ploše je geodetika, pokud pro každé t∈[a,b] je vektor c''(t) kolmý k ploše

Je-li křivka c nejkratší spojnicí dvou bodů na ploše a ||c'(t)||=konst., pak c je geodetika

Hledání geodetik pomocí izometrií

Izometrie = zobrazení mezi plochami, které zachovává délky křivek

Izometrie zachovávají geodetiky

Příklad: geodetiky na kuželové ploše

Kuželová plocha: (u cos v, u sin v, k u)
Rovina (polární souřadnice): (r cos α, r sin α, 0)
Izometrie:  ({{u=(r/(Sqrt[(k^2)+1])),   v=α(Sqrt[(k^2)+1])}})

Manipulate[
Row[{ParametricPlot[{R Cos[β]-t Sin[β],R Sin[β]+t Cos[β]},{t,-10,10},PlotRange->{{-10,10},{-10,10}},PlotStyle->{Lighter@Blue,Thick},ImageSize->{250,250},Epilog->{Arrow[{{0,0},{R Cos[β],R Sin[β]}}]},BaseStyle->12],Show[ParametricPlot3D[cone[k][{u,v}],{u,0,umax},{v,0,2Pi},Mesh->False,PerformanceGoal->"Quality",PlotStyle->{FaceForm[{Yellow,Specularity[White,20],Opacity[1-trans]},{Orange,Specularity[White,20],Opacity[1-trans]}]},Lighting->"Neutral"],ParametricPlot3D[cone[k][geo[k,β,R][t]],{t,-40,40},PlotStyle->{Blue,Specularity[Yellow,10],Tube[0.02umax]},PerformanceGoal->"Quality"],Boxed->False,Axes->False,ImageSize->{350,350},ViewAngle->0.45,ViewPoint->{-3,0,-0.5},ViewVertical->{0,0,-1},PlotRangePadding->None]}],{{k,3,"Cone slope"},1,5,Appearance->"Labeled"},{{R,2,"Distance R"},0.01,5,Appearance->"Labeled"},{{β,0,"Angle β"},0,2Pi,Appearance->"Labeled"},{{trans,0,"Surface transparency"},0,1,Appearance->"Labeled"},SaveDefinitions->True,
Initialization->{cone[k_][{u_,v_}]:={u Cos[v],u Sin[v],k u};geo[k_,β_,R_][t_]:=With[{x=R Cos[β]-t Sin[β],y=R Sin[β]+t Cos[β]},{Norm[{x,y}]/Sqrt[k^2+1],(ArcTan@@(RotationMatrix[-β].{x,y})+β)Sqrt[k^2+1]}]; umax=3},TrackedSymbols:>{β,R,trans,k}]

Příklad: geodetiky na pseudosféře

Pseudosféra = plocha vzniklá rotací traktrix kolem asymptoty

Konstantní záporná Gaussova křivost, model neeuklidovské geometrie (Beltrami)

Module[{x,y},Manipulate[With[{t0=(π/2)-u},Show[ParametricPlot[{x[t],y[t]},{t,0,(π/2)},PlotStyle->{Blue,Thick}],Graphics[{Red,Thick,Line[{{0,y[t0]+(Sqrt[1-((x[t0])^2)])},{x[t0],y[t0]}}],Black,PointSize[Large],Point[{0,y[t0]+(Sqrt[1-((x[t0])^2)])}],Point[{x[t0],y[t0]}]}],PlotRange->{Automatic,{0,3}}]],{u,0,(π/2)-0.01},SaveDefinitions->True,Initialization:>(x[t_]=Sin[t];
y[t_]=-Cos[t]+(1/2) Log[1+Cos[t]]-(1/2) Log[1-Cos[t]])]]

Traktrix:  x=1/v, z=-(Sqrt[1-1/(v^2)])+(cosh^(-1))v, kde v∈[1,∞)

Rotací vznikne plocha, jejíž první základní forma je ds^2 =(d(u^2)+d(v^2))/(v^2) ... stejná jako v Poincarého polorovinovém modelu!

Geodetiky v Poincarého modelu jsou půlkružnice se středy na vodorovné ose a svislé přímky

Manipulate[Module[{tr,ps},Row[{LocatorPane[Dynamic[{a,b}],Dynamic[Graphics[{Thick,Blue,If[a[[1]]==b[[1]],Line[{{a[[1]],0},{a[[1]],height}}],Circle[{x0=((-((a[[1]])^2)-((a[[2]])^2)+((b[[1]])^2)+((b[[2]])^2))/(-2 a[[1]]+2 b[[1]])),0},r=(Sqrt[(((a[[1]]-x0))^2)+((a[[2]])^2)]),{0,π}]]},PlotRange->{{-(w/2),(w/2)},{0,height}},ImageSize->{290,290},Frame->True,FrameTicks->{{Automatic,None},{Range[-(w/2),(w/2),π],None}},GridLines->{None,{1}},GridLinesStyle->Dashed,PlotRangeClipping->True,PlotRangePadding->{1,0}]],{{-(w/2),1},{(w/2),height}}],Spacer[3],Dynamic[Show[If[tr===trans,ps,tr=trans;ps=ParametricPlot3D[h[u,v],{u,0,2 π},{v,1,30},Mesh->None,PlotStyle->{FaceForm[{Yellow,Specularity[White,20],Opacity[1-trans]},{Orange,Specularity[White,20],Opacity[1-trans]}]},Boxed->False,Axes->False,ImageSize->{290,360},PlotRange->{{-1,1},{-1,1},{0,2.8}},PlotPoints->70,PerformanceGoal->"Quality",ViewPoint->{1.5,-3,0.5}]],If[a[[1]]==b[[1]],ParametricPlot3D[h[a[[1]],t],{t,0,30},PlotStyle->{Blue,Specularity[Yellow,10],Tube[0.02]}],ParametricPlot3D[h[x0+r Cos[t],r Sin[t]],{t,ArcSin[(1/r)],π-ArcSin[(1/r)]},PlotStyle->{Blue,Specularity[Yellow,10],Tube[0.02]},PerformanceGoal->"Quality"]],If[pts,Graphics3D[{Black,Sphere[h@@a,0.04],Sphere[h@@b,0.04]}],{}]]]}]],{{trans,0,"Surface transparency"},0,1,Appearance->"Labeled"},{{a,{0,1.5}},None},{{b,{0,5}},None},{x0,None},{r,None},{{pts,True,"Show points"},{True,False}},Initialization:>(h[u_,v_]:={((Cos[u])/v),((Sin[u])/v),ArcCosh[v]-(Sqrt[1-(1/(v^2))])};height=25;w=8 π)]

Numerické řešení rovnic pro geodetiky

Křivka c(t)=f(u(t),v(t)) na ploše f je geodetika právě tehdy, když platí

u''(t)+(Subscript[Γ, 1,1]^1)(u(t),v(t))((u'(t))^2)+2(Subscript[Γ, 1,2]^1)(u(t),v(t))u'(t)v'(t)+(Subscript[Γ, 2,2]^1)(u(t),v(t))((v'(t))^2)=0
     v''(t)+(Subscript[Γ, 1,1]^2)(u(t),v(t))((u'(t))^2)+2(Subscript[Γ, 1,2]^2)(u(t),v(t))u'(t)v'(t)+(Subscript[Γ, 2,2]^2)(u(t),v(t))((v'(t))^2)=0,

kde (Subscript[Γ, i,j]^k) jsou Christoffelovy symboly.

První základní forma plochy f:

g[u_,v_]:=Simplify[Table[(∂_(u[i]))f[u[1],u[2]].(∂_(u[j]))f[u[1],u[2]],{i,1,2},{j,1,2}]]/.{u[1]->u,u[2]->v}

Inverzní matice:

b[u_,v_]:=Inverse[g[u,v]]

Christoffelovy symboly:

Γ[i_,j_,k_][u_,v_]:=Simplify[(∑_(l=1)^2)b[u[1],u[2]][[k,l]] (∂_(u[i],u[j]))f[u[1],u[2]].(∂_(u[l]))f[u[1],u[2]]]/.{u[1]->u,u[2]->v}

Diferenciální rovnice pro geodetiky:

geodesicEqns:=Table[(∂_({t,2}))u[k][t]+(∑_(i=1)^2)(∑_(j=1)^2)Γ[i,j,k][u[1][t],u[2][t]] (∂_t)u[i][t] (∂_t)u[j][t]==0,{k,1,2}]/.{u[1]->u,u[2]->v}

Nalezení geodetiky, která má v zadaném bodě zadaný směr

findGeodesic1[{u0_,v0_},{a1_,a2_},tmax_]:=First[NDSolve[Join[geodesicEqns,{u[0]==u0,v[0]==v0,u'[0]==a1,v'[0]==a2}],{u[t],v[t]},{t,0,tmax},MaxSteps->∞]]

Příklad: sféra

f[u_,v_]:={Cos[u] Cos[v],Cos[v] Sin[u],Sin[v]}

Geodetiky vycházející z bodu f(0,0):

sol=Table[findGeodesic1[{0,0},{Cos[α],Sin[α]},1],{α,0,2 π,(π/8)}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-(π/2),(π/2)},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[0,0],0.03]}],Boxed->False,Axes->False]

Nalezení geodetiky spojující zadané dva body

Obecně není zaručena existence ani jednoznačnost

Metoda střelby, nemusí vždy dokonvergovat k řešení (i když existuje)

findGeodesic2[{u1_,v1_},{u2_,v2_}]:=First[NDSolve[Join[geodesicEqns,{u[0]==u1,v[0]==v1,u[1]==u2,v[1]==v2}],{u[t],v[t]},{t,0,1},MaxSteps->∞]]

Geodetika spojující body f(u1,v1) a f(u2,v2):

{u1,v1}={-20 °,-10 °};{u2,v2}={30 °,45 °};

sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-(π/2),(π/2)},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.03],Sphere[f[u2,v2],0.03]}],PlotRange->All,Boxed->False,Axes->False]

Příklad: válec

f[u_,v_]:={Cos[u],Sin[u],v}

{u1,v1}={0 °,-1};{u2,v2}={100 °,1};
sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-2,2},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.06],Sphere[f[u2,v2],0.06]}],PlotRange->All,Boxed->False,Axes->False]

Příklad: paraboloid

f[u_,v_]:={u,v,u^2+v^2}

{u1,v1}={-2,2};{u2,v2}={1,1.5};
sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-3,3},{v,-3,3},RegionFunction->Function[{x,y,z},(x^2)+(y^2)<9],MeshFunctions->{#3&},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.1],Sphere[f[u2,v2],0.1]}],PlotRange->All,Boxed->False,Axes->False]

Příklad: torus

f[u_,v_]:={(2+Cos[u])Cos[v],(2+Cos[u])Sin[v],Sin[u]}

{u1,v1}={-20 °,-60 °};{u2,v2}={20 °,45 °};
sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-π,π},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.1],Sphere[f[u2,v2],0.1]}],PlotRange->All,Boxed->False,Axes->False]

{u1,v1}={0 °,0 °};{u2,v2}={180 °,180 °};
sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-π,π},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.1],Sphere[f[u2,v2],0.1]}],PlotRange->All,Boxed->False,Axes->False]

findGeodesic2[{u1_,v1_},{u2_,v2_}]:=First[NDSolve[Join[geodesicEqns,{u[0]==u1,v[0]==v1,u[1]==u2,v[1]==v2}],{u[t],v[t]},{t,0,1},MaxSteps->∞,Method->{"Shooting","StartingInitialConditions"->{u[(1/2)]==((u1+u2)/2),v[(1/2)]==((v1+v2)/2),u'[(1/2)]==0,v'[(1/2)]==0}}]]

{u1,v1}={0 °,0 °};{u2,v2}={180 °,180 °};
sol=findGeodesic2[{u1,v1},{u2,v2}];
Show[ParametricPlot3D[f[u,v],{u,-π,π},{v,-π,π},ColorFunction->"MintColors"],ParametricPlot3D[f[u[t],v[t]]/. sol,{t,0,1},PlotStyle->{Red,AbsoluteThickness[4]}],Graphics3D[{Black,Sphere[f[u1,v1],0.1],Sphere[f[u2,v2],0.1]}],PlotRange->All,Boxed->False,Axes->False]

Příklad: geodetiky na hyperboloidu a Clairautova věta

Manipulate[
Module[{a1,a2,sol},
{a1,a2}={((Sin[α])/(Norm[(∂_u)hyp[u,v]])),((Cos[α])/(Norm[(∂_v)hyp[u,v]]))}/.{u->u0,v->v0};sol=NDSolve[{((Sinh[2 u[t]] ((1+(k^2)) ((u'[t])^2)-((v'[t])^2)))/(-1+(k^2)+(1+(k^2)) Cosh[2 u[t]]))+u''[t]==0,2 Tanh[u[t]] u'[t] v'[t]+v''[t]==0,u[0]==u0,v[0]==v0,u'[0]==a1,v'[0]==a2},{u[t],v[t]},{t,-25,50},MaxSteps->∞];Show[ParametricPlot3D[hyp[u,v],{u,-2.5,2.5},{v,-π,π},Mesh->None,PlotStyle->{FaceForm[{Yellow,Specularity[White,20],Opacity[1-trans]},{Orange,Specularity[White,20],Opacity[1-trans]}]},PlotRange->{{-5,5},{-5,5},{-5,5}},Boxed->False,Axes->False,ImageSize->{400,400},PerformanceGoal->"Quality"],ParametricPlot3D[hyp[u[t],v[t]]/.sol,{t,-25,50},PlotStyle->{Blue,Specularity[Yellow,10],Tube[0.04]},PerformanceGoal->"Quality"],Graphics3D[{Black,Sphere[hyp[u0,v0],0.15]}],ViewPoint->{3,-2,1.5},ViewAngle->0.3,ViewVertical->{0,0.5,1}]],{{α,0,"angle α"},0,(π/2),Appearance->"Labeled"},
{{u0,-0.25,"initial height"},-0.5,0,Appearance->"Labeled"},
{{trans,0,"surface transparency"},0,1,Appearance->"Labeled"},
SynchronousUpdating->False,
Bookmarks->{"Critical case":>(α=ArcCos[(1/(Cosh[u0]))])},
Initialization:>(
k=4;
v0=0;
hyp[u_,v_]:={Cos[v] Cosh[u],Cosh[u] Sin[v],k Sinh[u]};
),TrackedSymbols:>{α,trans,u0}]

Jak velký musí být počáteční úhel, aby geodetika pokračovala do horní poloviny hyperboloidu?

Podél geodetiky na rotační ploše platí r cos α=konst., kde r je poloměr rovnoběžky v daném bodě a α je velikost úhlu mezi geodetikou a rovnoběžkou.

Má-li součin v jistém bodě hodnotu (Subscript[r, 0])cos (Subscript[α, 0]), pak ve všech bodech geodetiky platí r=(((Subscript[r, 0])cos (Subscript[α, 0]))/(cos α))≥(Subscript[r, 0])cos (Subscript[α, 0]).

Použité a doporučené zdroje

A. Slavík: Intrinsically defined curves and special functions, Mathematics Magazine 86 (2013), 211–219

K. Boguta and F. Meinberg, Intrinsically Defined Curves, Wolfram Demonstrations Project, 
http://demonstrations.wolfram.com/IntrinsicallyDefinedCurves/

A. Slavík: Surfaces of Revolution with Constant Gaussian Curvature, Wolfram Demonstrations Project, http://demonstrations.wolfram.com/SurfacesOfRevolutionWithConstantGaussianCurvature/

A. Slavík: Cone Geodesics, Wolfram Demonstrations Project, http://demonstrations.wolfram.com/ConeGeodesics/

A. Slavík: Pseudosphere Geodesics, Wolfram Demonstrations Project, http://demonstrations.wolfram.com/PseudosphereGeodesics/

A. Slavík: Hyperboloid Geodesics, Wolfram Demonstrations Project, http://demonstrations.wolfram.com/HyperboloidGeodesics/